EMNLP 2019 任务型对话整理
创新点:将NLG的响应生成与语言模型结合,共享encoder,作为多任务学习。
Abstract
在面向任务的对话中,自然语言生成(NLG)是生成面向用户系统话语的最后一步。NLG的结果直接关系到对话系统的质量和可用性。尽管大多数现有的系统在给出目标时都能给出正确的响应,但它们很难与人类语言的多样性和流利性相匹配。在本文中提出了一个新的多任务学习框架,NLG-LM,用于自然语言生成。除了生成传递所需信息的高质量响应外,它还通过一个未配置的语言模型明确地针对生成响应的自然相关性。这对提高人类语言的风格和多样性有重要意义。
实验结果表明,该多任务学习框架在多数据集的学习效果优于已有的多任务学习框架。例如,它将以前E2E-NLG数据集上的最佳BLEU评分提高了2.2%,将笔记本数据集上的最佳BLEU评分提高了6.1%。
Intro
Challenge: 由于NLG直接面向用户,其可读性和信息量直接影响用户对整个对话系统的感知。一方面,为了提供或请求用户的信息,响应必须包含所需的信息,即meaning representation(MR)。另一方面,系统响应需要模仿人类语言的流动性和变异性来提高用户体验。早期的工作主要采用预定义的规则语法,尽管这些框架可以提供足够的信息,但是它们缺乏语言的自然性和变化性,使得响应非常僵化。此外,这些方法通常需要费力气的手工工作来创建模板,从而使它们无法跨域扩展。
Method: 由于面向任务的对话数据通常包含丰富的人类响应,因此利用语言建模技术提高NLG模型模拟人类语言的能力具有很大的潜力。
meaning representation(MR)
本文方法: 本文提出了一个多任务方案来解决面向任务的对话中的自然语言生成问题。对于NLG任务,我们使用了一个equence-to-sequence的框架。解码器使用一种attention机制传送信息,从编码器处编码的一个MR序列。因此,NLG任务生成响应的条件是输入MR。
我们工作的主要贡献是将语言建模任务整合到人为生成的响应中,作为无条件的补充过程,引入更多与语言相关的元素,而无需干预MR信息。此外,语言建模的非监督性质意味着我们不需要额外的标记数据。因此,在多任务学习框架下,我们同时训练NLG和语言建模任务。为了促进多任务学习,我们在解码器中执行语言建模任务,并且部分共享来自NLG任务的参数。
为了评估模型NLG-LM的有效性,本文对5个任务导向的对话任务进行了评估: E2E-NLG、电视、笔记本电脑、酒店和餐厅数据集。NLG-LM在所有5个数据集上达到了新的SOTA。例如,它超过了最优秀的E2E-NLG竞争对手Slug,在BLEUscore的成绩为2.2%。消融研究表明,在训练过程中引入语言建模任务可以使BLEU分数平均提高2.4%。
Problem setting
Pipeline 模型,根据DM生成的action(槽值对),本文叫MR(。Q_Q。),来生成自然语言。
在面向任务的对话中,自然语言生成(NLG)过程是将系统话语作为自然语言生成,给定系统生成的意义表示MR,这些表示来自pipeline模型之前的步骤。每个MR是一个槽值对,槽表示要传递的信息的类别,值表示内容。
Dialogue acts被用来区分不同类型的系统动作。典型的对话行为包括inform, request, confirm。对于给定的意义表示,NLG过程应该为不同的对话行为生成不同的话语。例如,confirm dialogue act通常会导致系统以“Let me confirm” or “Correct me if I’m wrong” 开始。
给定训练数据${(di,ri,ui)}$,其中di是对话行为,$ri = {(s1,v1),(s2,v2),…,(sk,vk)}$是含义表示的集合,ui是样本是由人类标记者产生的话语,目的是通过一对新的对话行为d和意义表示r来产生话语u。
地点等实体用特殊token代替。
Model
先将对话动作d和意义表示r连接在一起作为单个输入序列I,有m个token。从给定的话语u中获得输出序列O,有n个token。两个序列都被去词化。在每个序列周围放置特殊的句子标记
模型训练的目标是在给定先前预测的token和输入序列的前提下,一次生成一个输出token。
可以将其建模为最大化条件概率分布:
Encoder:
我们训练一个dictionary D来将每个token映射到一维定长向量。
输入的embedding序列然后进入双向RNN层以生成contextualized embedding。
我们使用GRU作为RNN单元,并汇总前向和后向RNN输出。
编码器的输出用$(u1,…,um)∈R^{d_h×m}$表示,其中$d_h$是RNN的输出尺寸,m是输入序列长度。
Decoder:
解码器采用具有注意力机制的RNN,一次生成一个令牌。它从 beginning-of-sentence 的 token开始,并使用encoder RNN的最终隐藏状态作为初始隐藏状态。
在第t步中,我们使用编码器中相同的字典D,将第t个输出token映射到向量$s_t$, 并且dropout。
然后,给定先前的隐藏状态$h_{t-1}$,解码器首先计算编码器输出的注意力权重:
然后将权重$α$应用于编码器的输出,以获得上下文向量 $c = α_iu_i$。
然后将上下文向量 c 和嵌入向量 $s_t$连接起来,并发送到解码器GRU中,输出为g和新的隐藏状态ht.
为了生成下一个token,我们重用了dictionary D及其转置的权重 $W_{D^1}$。我们再次集成上下文向量来融合上下文信息:
其中$W_2$是参数化矩阵。$p_t$下一个token在字典中所有token上的概率分布。
损失函数是交叉熵。假设第t步的one-hot向量是 $y_t$ (谁的one-hot向量??), 那么每个训练样本序列对的损失函数是:
与语言模型耦合
上面介绍了在NLG中如何在字典中选token,下面介绍如何融入语言模型。
上面的编码器-解码器方法通过attention机制,在每个步骤中将对话动作d和含义表示r的信息合并在一起。
但是,由于这种机制,所产生的话语在很大程度上不可避免地依赖于输入顺序,而较少地关注人类语言的流畅性和变化性,但是这一点与在面向任务的对话中传达所需信息一样重要。另一方面,语言建模通常用于刻画单词,短语和句子的自然性。
一个训练有素的语言模型可以在自然和语义上比僵硬和不自然的句子获得更高的分数。
在深度学习中,语言模型任务通常由递归神经网络解决,但是,与(1)式不同的是,语言模型中出现下一个token的概率只依赖于前面的单词,而不依赖于输入序列:
我们认为,通过将语言建模作为一个额外的目标集成到NLG过程中,生成的句子将更好地接近人类反应的风格和变化。为此,我们将另一个GRU单元$GRU^{LM}$添加到解码器中,该解码器具有自己的隐藏状态 $h^{LM}{t-1}$, 并接受嵌入向量$s_t$作为输入。输出是 $g^{LM}$和新的隐藏状态 $h^{LM}{t}$。在语言模型中,下一个token的概率分布为:
其中W2[:dh]为W2的第dh列。可以看出,上下文c并不影响语言建模的概率计算。语言模型的损失函数为:
最后,我们将这两个损失函数线性地合并成一个单一的多任务损失函数:
图1中描述了模型结构。如图所示,词典D在NLG任务和语言建模任务之间共享。
Experiment
本文评估了来自不同领域的五个数据集的模型,包括了餐厅预订,酒店预订和零售。最大的数据集来自E2E-NLG任务,由餐厅区域内的51.2K个MR话语对组成。还使用RNN-LG的四个数据集,包括电视零售,笔记本电脑零售,酒店预订和餐厅预订领域中的对话场景,分别为14.1K,26.5K,8.7K和8.5K个样本。
Baseline:TGen, SC-LSTM, RALSTM, Slug
Use the multi-taskcoefficient α= 0.5 in all experiments
Use the BLEU-4 and NIST metrics.
Conclusion
本文提出了一种新的多任务学习方法 NLG-LM。它将语言模型任务作为无条件的补充过程整合到响应生成过程中,以提高生成话语的自然度。在多任务学习模式下,将这两个任务都安排在一个序列到序列的结构中。实验结果表明,该算法在5个大规模数据集上都有较好的性能,计算效率较高。消融实验显示了在多任务模式下使用语言建模任务的有效性。
Sih: 将NLG的响应生成与语言模型结合,一起学习,共享decoder,作为多任务学习(Multi task), NLG-LM的输入用的是pipeline模型的DM的输出,是one-hot编码(竟然!我们pipeline还是有未来的…)。
和传统多任务学习相似,但和我看到abstract时的想法不太一致, 以为是Multi task learning的应用,呜呜…。